package com.biz.primus.model.oms.stream;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 退货单状态变更消息通知渠道
 * @author yanweijin
 * @date 2017/11/17
 */
public interface ReturnStateChannel {


	/**
	 * 新的待审核的退货单
	 */
	String RETURN_BEGIN = "oms-return-begin";
	/**
	 * 审核完成并且审核通过的退货单
	 */
	String RETURN_AUDITED_AND_PASS = "oms-return-audited-pass";
	/**
	 * 审核完成并且审核拒绝的退货单
	 */
	String RETURN_AUDITED_AND_REJECT = "oms-return-audited-reject";
	/**
	 * 退货单进入退货中状态
	 */
	String RETURN_RETURNING = "oms-return-returning";
	/**
	 * 退货单完成入库验收
	 */
	String RETURN_FINISHED = "oms-return-finished";
	/**
	 * 退货单取消/终止
	 */
	String RETURN_CANCEL = "oms-return-cancel";
	/**
	 * 退货单退款完成
	 */
	String RETURN_REFUND_FINISHED = "oms-return-refund-finished";

    /**
     * 退货单退款消息对象
     */
    @Data
    @Builder
    @AllArgsConstructor
    @NoArgsConstructor
	class ReturnRefundStreamData{
        /**
         * 退货单编号
         */
		String returnCode;
        /**
         * 退款流水号
         */
		String refundSerialNumber;
	}


	@Data
	@Builder
	@AllArgsConstructor
	@NoArgsConstructor
	class ReturnStateStreamData{
		/**
		 * 退货单编号
		 */
		String returnCode;
		/**
		 * 退货单id
		 */
		Long returnId;
		/**
		 * 是否需要退款
		 */
		boolean needRefund = false;
		/**
		 * 是否需要入库
		 */
		boolean needInbound = false;
	}


	/**
	 * 订单状态发生变化时发生消息的渠道
	 */
	String RETURN_STATE_CHANGE = "oms-return-state-change";

	/**
	 * ORDER_STATE_CHANGE 渠道传递的数据
	 */
	@Data
	class ReturnStateChangeNotice{
		private String returnCode;
		private String depotCode;
	}


}
